// vite.config.ts
import { resolve } from "node:path";
import { loadEnv } from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/vite@5.4.4_@types+node@20.16.5_less@4.2.0_sass-embedded@1.78.0_terser@5.32.0/node_modules/vite/dist/node/index.js";
import { format } from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/index.mjs";

// build/utils.ts
import dotenv from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/dotenv@16.4.5/node_modules/dotenv/lib/main.js";
function isReportMode() {
  return process.env.REPORT === "true";
}
function wrapperEnv(envConf) {
  const ret = {};
  for (const envName of Object.keys(envConf)) {
    let realName = envConf[envName].replace(/\\n/g, "\n");
    realName = realName === "true" ? true : realName === "false" ? false : realName;
    if (envName === "VITE_PORT") {
      realName = Number(realName);
    }
    if (envName === "VITE_PROXY") {
      try {
        realName = JSON.parse(realName);
      } catch (error) {
      }
    }
    ret[envName] = realName;
    process.env[envName] = realName;
  }
  return ret;
}

// build/vite/plugin/index.ts
import Components from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/unplugin-vue-components@0.26.0_@babel+parser@7.25.6_rollup@4.21.2_vue@3.5.4_typescript@5.6.2_/node_modules/unplugin-vue-components/dist/vite.js";
import { VantResolver } from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/unplugin-vue-components@0.26.0_@babel+parser@7.25.6_rollup@4.21.2_vue@3.5.4_typescript@5.6.2_/node_modules/unplugin-vue-components/dist/resolvers.js";
import vue from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/@vitejs+plugin-vue@5.1.3_vite@5.4.4_@types+node@20.16.5_less@4.2.0_sass-embedded@1.78.0_terse_3breqxxse65zwsnptx6uq2ys7e/node_modules/@vitejs/plugin-vue/dist/index.mjs";
import UnoCSS from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/unocss@0.58.9_postcss@8.4.45_rollup@4.21.2_vite@5.4.4_@types+node@20.16.5_less@4.2.0_sass-embedded@1.78.0_terser@5.32.0_/node_modules/unocss/dist/vite.mjs";
import AutoImport from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/unplugin-auto-import@0.17.8_@vueuse+core@10.11.1_vue@3.5.4_typescript@5.6.2___rollup@4.21.2/node_modules/unplugin-auto-import/dist/vite.js";

// build/vite/plugin/html.ts
import { createHtmlPlugin } from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/vite-plugin-html@3.2.2_vite@5.4.4_@types+node@20.16.5_less@4.2.0_sass-embedded@1.78.0_terser@5.32.0_/node_modules/vite-plugin-html/dist/index.mjs";

// package.json
var package_default = {
  name: "vue3-vant4-mobile",
  type: "module",
  version: "2.1.0",
  private: true,
  packageManager: "pnpm@9.8.0",
  author: {
    name: "xiangshu233",
    email: "xiangshu233@outlook.com",
    url: "https://github.com/xiangshu233"
  },
  license: "MIT",
  repository: {
    type: "git",
    url: "git+https://github.com/xiangshu233/vue3-vant4-mobile.git"
  },
  bugs: {
    url: "https://github.com/xiangshu233/vue3-vant4-mobile/issues"
  },
  engines: {
    node: "^20.9.0 || >=21.7.1",
    pnpm: ">=8.15.4"
  },
  scripts: {
    preinstall: "npx only-allow pnpm",
    bootstrap: "pnpm install",
    serve: "npm run dev",
    dev: "cross-env VITE_CJS_IGNORE_WARNING=true vite dev",
    "dev:debugcjs": "cross-env VITE_CJS_TRACE=true vite dev",
    build: "cross-env NODE_ENV=production vite build && esno ./build/script/postBuild.ts",
    "build:no-cache": "pnpm clean:cache && npm run build",
    report: "cross-env REPORT=true npm run build",
    "type:check": "vue-tsc --noEmit --skipLibCheck",
    preview: "vite preview",
    "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite",
    "clean:lib": "rimraf node_modules",
    lint: "eslint .",
    "lint:fix": "eslint . --fix",
    "lint:lint-staged": "lint-staged"
  },
  dependencies: {
    "@types/lodash-es": "^4.17.12",
    "@types/qrcode": "^1.5.5",
    "@unocss/reset": "^0.58.5",
    "@vueuse/core": "^10.7.0",
    axios: "^1.4.0",
    "date-fns": "^3.0.6",
    echarts: "^5.4.3",
    "html5-qrcode": "^2.3.8",
    "lodash-es": "^4.17.21",
    mockjs: "^1.1.0",
    nprogress: "^0.2.0",
    pinia: "^2.1.7",
    "pinia-plugin-persist": "^1.0.0",
    qrcode: "^1.5.4",
    qs: "^6.11.2",
    vant: "^4.8.1",
    vue: "^3.3.13",
    "vue-qrcode-reader": "^5.5.8",
    "vue-router": "4.2.5",
    vuedraggable: "^4.1.0",
    "wc-flow-layout": "^0.0.5"
  },
  devDependencies: {
    "@antfu/eslint-config": "^2.6.3",
    "@commitlint/cli": "^18.4.3",
    "@commitlint/config-conventional": "^18.4.3",
    "@iconify/json": "^2.2.188",
    "@types/fs-extra": "^11.0.4",
    "@types/mockjs": "^1.0.10",
    "@types/node": "^20.10.5",
    "@types/nprogress": "^0.2.3",
    "@types/qs": "^6.9.11",
    "@unocss/eslint-plugin": "^0.58.4",
    "@unocss/preset-icons": "^0.58.5",
    "@unocss/preset-rem-to-px": "^0.58.5",
    "@unocss/transformer-directives": "^0.58.4",
    "@unocss/transformer-variant-group": "^0.58.4",
    "@vitejs/plugin-vue": "^5.0.0",
    autoprefixer: "^10.4.16",
    "cross-env": "^7.0.3",
    "cz-git": "^1.8.0",
    dotenv: "^16.3.1",
    eslint: "^8.56.0",
    "eslint-plugin-format": "^0.1.0",
    esno: "^0.16.3",
    "fs-extra": "^11.2.0",
    less: "^4.2.0",
    "lint-staged": "^15.2.0",
    "only-allow": "^1.2.1",
    picocolors: "^1.0.0",
    postcss: "^8.4.32",
    "postcss-mobile-forever": "^4.0.0",
    rimraf: "^3.0.2",
    rollup: "^4.9.1",
    "rollup-plugin-visualizer": "^5.11.0",
    "sass-embedded": "^1.78.0",
    "simple-git-hooks": "^2.9.0",
    typescript: "^5.3.3",
    unocss: "^0.58.5",
    "unplugin-auto-import": "^0.17.5",
    "unplugin-vue-components": "^0.26.0",
    vite: "^5.0.10",
    "vite-plugin-compression": "^0.5.1",
    "vite-plugin-html": "^3.2.2",
    "vite-plugin-mock": "^2.9.8",
    "vite-plugin-svg-icons": "^2.0.1",
    "vue-tsc": "^1.8.27"
  },
  "simple-git-hooks": {
    "pre-commit": "pnpm lint-staged",
    "commit-msg": "npx --no-install commitlint --edit $1"
  },
  "lint-staged": {
    "*": "eslint --fix"
  },
  config: {
    commitizen: {
      path: "node_modules/cz-git"
    }
  }
};

// build/constant.ts
var GLOB_CONFIG_FILE_NAME = "app.config.js";
var OUTPUT_DIR = "dist/vant-mobile";

// build/vite/plugin/html.ts
function configHtmlPlugin(env, isBuild) {
  const { VITE_GLOB_APP_TITLE, VITE_PUBLIC_PATH } = env;
  const path2 = VITE_PUBLIC_PATH.endsWith("/") ? VITE_PUBLIC_PATH : `${VITE_PUBLIC_PATH}/`;
  const getAppConfigSrc = () => {
    return `${path2 || "/"}${GLOB_CONFIG_FILE_NAME}?v=${package_default.version}-${(/* @__PURE__ */ new Date()).getTime()}`;
  };
  const htmlPlugin = createHtmlPlugin({
    minify: isBuild,
    inject: {
      // Inject data into ejs template
      // 需要注入 index.html ejs 模版的数据 使用在 html 中 ：<div><%= title %></div>
      data: {
        title: VITE_GLOB_APP_TITLE
      },
      // Embed the generated app.config.js file 需要注入的标签列表
      tags: isBuild ? [
        {
          tag: "script",
          attrs: {
            src: getAppConfigSrc()
          }
        }
      ] : []
    }
  });
  return htmlPlugin;
}

// build/vite/plugin/mock.ts
import { viteMockServe } from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/vite-plugin-mock@2.9.8_mockjs@1.1.0_vite@5.4.4_@types+node@20.16.5_less@4.2.0_sass-embedded@1.78.0_terser@5.32.0_/node_modules/vite-plugin-mock/dist/index.js";
function configMockPlugin(isBuild, prodMock) {
  return viteMockServe({
    ignore: /^\_/,
    mockPath: "mock",
    localEnabled: !isBuild,
    prodEnabled: isBuild && prodMock,
    injectCode: `
      import { setupProdMockServer } from '../mock/_createProductionServer';

      setupProdMockServer();
      `
  });
}

// build/vite/plugin/compress.ts
import compressPlugin from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/vite-plugin-compression@0.5.1_vite@5.4.4_@types+node@20.16.5_less@4.2.0_sass-embedded@1.78.0_terser@5.32.0_/node_modules/vite-plugin-compression/dist/index.mjs";
function configCompressPlugin(compress, deleteOriginFile = false) {
  const compressList = compress.split(",");
  const plugins = [];
  if (compressList.includes("gzip")) {
    plugins.push(
      compressPlugin({
        ext: ".gz",
        deleteOriginFile
      })
    );
  }
  if (compressList.includes("brotli")) {
    plugins.push(
      compressPlugin({
        ext: ".br",
        algorithm: "brotliCompress",
        deleteOriginFile
      })
    );
  }
  return plugins;
}

// build/vite/plugin/visualizer.ts
import visualizer from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/rollup-plugin-visualizer@5.12.0_rollup@4.21.2/node_modules/rollup-plugin-visualizer/dist/plugin/index.js";
function configVisualizerConfig() {
  if (isReportMode()) {
    return visualizer({
      filename: "./node_modules/.cache/visualizer/stats.html",
      open: true,
      gzipSize: true,
      brotliSize: true
    });
  }
  return [];
}

// build/vite/plugin/svgSprite.ts
import path from "node:path";
import { createSvgIconsPlugin } from "file:///W:/VSCodeWorkspace/%E6%99%AF%E5%9D%9E%E6%9D%91%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BA%A2%E5%8D%B0%E6%95%B0%E5%AD%97%E7%A0%94%E5%AD%A6%E6%A1%88%E4%BE%8BH5/Jingwu-village-research-study/node_modules/.pnpm/vite-plugin-svg-icons@2.0.1_vite@5.4.4_@types+node@20.16.5_less@4.2.0_sass-embedded@1.78.0_terser@5.32.0_/node_modules/vite-plugin-svg-icons/dist/index.mjs";
function configSvgIconsPlugin(isBuild) {
  const svgIconsPlugin = createSvgIconsPlugin({
    iconDirs: [path.resolve(process.cwd(), "src/assets/icons")],
    // 是否压缩
    svgoOptions: isBuild,
    // 指定symbolId格式
    symbolId: "icon-[dir]-[name]"
  });
  return svgIconsPlugin;
}

// build/vite/plugin/index.ts
function createVitePlugins(viteEnv, isBuild, prodMock) {
  const { VITE_USE_MOCK, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv;
  const vitePlugins = [
    // have to
    vue(),
    // 按需引入VantUi且自动创建组件声明
    Components({
      dts: true,
      resolvers: [VantResolver()],
      types: []
    }),
    // UnoCSS
    UnoCSS(),
    AutoImport({
      // targets to transform
      include: [
        /\.[tj]sx?$/,
        // .ts, .tsx, .js, .jsx
        /\.vue$/,
        /\.vue\?vue/
        // .vue
      ],
      imports: [
        // presets
        "vue",
        "vue-router",
        "pinia",
        "@vueuse/core"
      ],
      dts: "types/auto-imports.d.ts"
    })
  ];
  vitePlugins.push(configHtmlPlugin(viteEnv, isBuild));
  vitePlugins.push(configVisualizerConfig());
  VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild, prodMock));
  vitePlugins.push(configSvgIconsPlugin(isBuild));
  if (isBuild) {
    vitePlugins.push(
      configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE)
    );
  }
  return vitePlugins;
}

// build/vite/proxy.ts
var httpsRE = /^https:\/\//;
function createProxy(list = []) {
  const ret = {};
  for (const [prefix, target] of list) {
    const isHttps = httpsRE.test(target);
    ret[prefix] = {
      target,
      changeOrigin: true,
      ws: true,
      rewrite: (path2) => path2.replace(new RegExp(`^${prefix}`), ""),
      // https is require secure=false
      // 如果您secure="true"只允许来自 HTTPS 的请求，则secure="false"意味着允许来自 HTTP 和 HTTPS 的请求。
      ...isHttps ? { secure: false } : {}
    };
  }
  return ret;
}

// vite.config.ts
var { dependencies, devDependencies, name, version } = package_default;
function pathResolve(dir) {
  return resolve(process.cwd(), ".", dir);
}
var __APP_INFO__ = {
  // APP 后台管理信息
  pkg: { dependencies, devDependencies, name, version },
  // 最后编译时间
  lastBuildTime: format(/* @__PURE__ */ new Date(), "yyyy-MM-dd HH:mm:ss")
};
var vite_config_default = ({ command, mode }) => {
  const root = process.cwd();
  const env = loadEnv(mode, root);
  const viteEnv = wrapperEnv(env);
  const { VITE_PUBLIC_PATH, VITE_DROP_CONSOLE, VITE_PORT, VITE_PROXY, VITE_GLOB_PROD_MOCK } = viteEnv;
  const prodMock = VITE_GLOB_PROD_MOCK;
  const isBuild = command === "build";
  return {
    base: VITE_PUBLIC_PATH,
    root,
    // 别名
    resolve: {
      alias: [
        // @/xxxx => src/xxxx
        {
          find: /\@\//,
          replacement: `${pathResolve("src")}/`
        },
        // #/xxxx => types/xxxx
        {
          find: /\#\//,
          replacement: `${pathResolve("types")}/`
        }
      ],
      dedupe: ["vue"]
    },
    // 定义全局常量替换方式
    define: {
      // 在生产中 启用/禁用 intlify-devtools 和 vue-devtools 支持，默认值 false
      __INTLIFY_PROD_DEVTOOLS__: false,
      __APP_INFO__: JSON.stringify(__APP_INFO__)
    },
    esbuild: {
      // 使用 esbuild 压缩 剔除 console.log
      drop: VITE_DROP_CONSOLE ? ["debugger", "console"] : []
      // minify: true, // minify: true, 等于 minify: 'esbuild',
    },
    build: {
      // 设置最终构建的浏览器兼容目标
      target: "es2015",
      minify: "esbuild",
      // 构建后是否生成 source map 文件(用于线上报错代码报错映射对应代码)
      sourcemap: false,
      cssTarget: "chrome80",
      // 指定输出路径（相对于 项目根目录)
      outDir: OUTPUT_DIR,
      // 只有 minify 为 terser 的时候, 本配置项才能起作用
      // terserOptions: {
      //   compress: {
      //     // 防止 Infinity 被压缩成 1/0，这可能会导致 Chrome 上的性能问题
      //     keep_infinity: true,
      //     // 打包是否自动删除 console
      //     drop_console: VITE_DROP_CONSOLE,
      //   },
      // },
      // 启用/禁用 gzip 压缩大小报告
      // 压缩大型输出文件可能会很慢，因此禁用该功能可能会提高大型项目的构建性能
      reportCompressedSize: true,
      // chunk 大小警告的限制（以 kbs 为单位）
      chunkSizeWarningLimit: 2e3,
      // 自定义底层的 Rollup 打包配置
      rollupOptions: {
        // 静态资源分类打包
        output: {
          chunkFileNames: "js/[name]-[hash].js",
          // 引入文件名的名称
          entryFileNames: "js/[name]-[hash].js",
          // 包的入口文件名称
          assetFileNames: "[ext]/[name]-[hash].[ext]",
          // 资源文件像 字体，图片等
          // 将 node_modules 三方依赖包最小化拆分
          manualChunks(id) {
            if (id.includes("node_modules")) {
              const paths = id.toString().split("node_modules/");
              if (paths[2]) {
                return paths[2].split("/")[0].toString();
              }
              return paths[1].split("/")[0].toString();
            }
          }
        }
      }
    },
    css: {
      preprocessorOptions: {
        less: {
          modifyVars: {},
          javascriptEnabled: true,
          // 注入全局 less 变量
          additionalData: `@import "src/styles/var.less";`
        }
      }
    },
    server: {
      host: true,
      // 服务启动时是否自动打开浏览器
      open: true,
      // 服务端口号
      port: Number(VITE_PORT),
      proxy: createProxy(VITE_PROXY),
      // 预热文件以降低启动期间的初始页面加载时长
      warmup: {
        // 预热的客户端文件：首页、views、 components
        clientFiles: ["./index.html", "./src/{views,components}/*"]
      }
      // proxy: {
      //     '/api': {
      //         target: '',
      //         changeOrigin: true,
      //         rewrite: (path) => path.replace(/^\/api/, '/api/v1')
      //     }
      // }
    },
    optimizeDeps: {
      /**
       * 依赖预构建，vite 启动时会将下面 include 里的模块，编译成 esm 格式并缓存到 node_modules/.vite 文件夹，
       * 页面加载到对应模块时如果浏览器有缓存就读取浏览器缓存，如果没有会读取本地缓存并按需加载
       * 尤其当您禁用浏览器缓存时（这种情况只应该发生在调试阶段）必须将对应模块加入到 include 里，
       * 否则会遇到开发环境切换页面卡顿的问题（vite 会认为它是一个新的依赖包会重新加载并强制刷新页面），
       * 因为它既无法使用浏览器缓存，又没有在本地 node_modules/.vite 里缓存
       * 温馨提示：如果你使用的第三方库是全局引入，也就是引入到 src/main.ts 文件里，
       * 就不需要再添加到 include 里了，因为 vite 会自动将它们缓存到 node_modules/.vite
       */
      include: [
        "pinia",
        "lodash-es",
        "axios"
      ],
      // 打包时强制排除的依赖项
      exclude: [
        // https://www.mulingyuer.com/archives/928/
        "vant",
        "@vant/use"
      ]
    },
    // 加载插件
    plugins: createVitePlugins(viteEnv, isBuild, prodMock)
  };
};
export {
  vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvdXRpbHMudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vaW5kZXgudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vaHRtbC50cyIsICJwYWNrYWdlLmpzb24iLCAiYnVpbGQvY29uc3RhbnQudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vbW9jay50cyIsICJidWlsZC92aXRlL3BsdWdpbi9jb21wcmVzcy50cyIsICJidWlsZC92aXRlL3BsdWdpbi92aXN1YWxpemVyLnRzIiwgImJ1aWxkL3ZpdGUvcGx1Z2luL3N2Z1Nwcml0ZS50cyIsICJidWlsZC92aXRlL3Byb3h5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiVzpcXFxcVlNDb2RlV29ya3NwYWNlXFxcXFx1NjY2Rlx1NTc1RVx1Njc1MVx1NkM4OVx1NkQ3OFx1NUYwRlx1N0VBMlx1NTM3MFx1NjU3MFx1NUI1N1x1NzgxNFx1NUI2Nlx1Njg0OFx1NEY4Qkg1XFxcXEppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5XCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJXOlxcXFxWU0NvZGVXb3Jrc3BhY2VcXFxcXHU2NjZGXHU1NzVFXHU2NzUxXHU2Qzg5XHU2RDc4XHU1RjBGXHU3RUEyXHU1MzcwXHU2NTcwXHU1QjU3XHU3ODE0XHU1QjY2XHU2ODQ4XHU0RjhCSDVcXFxcSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHlcXFxcdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1c6L1ZTQ29kZVdvcmtzcGFjZS8lRTYlOTklQUYlRTUlOUQlOUUlRTYlOUQlOTElRTYlQjIlODklRTYlQjUlQjglRTUlQkMlOEYlRTclQkElQTIlRTUlOEQlQjAlRTYlOTUlQjAlRTUlQUQlOTclRTclQTAlOTQlRTUlQUQlQTYlRTYlQTElODglRTQlQkUlOEJINS9KaW5nd3UtdmlsbGFnZS1yZXNlYXJjaC1zdHVkeS92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgdHlwZSB7IENvbmZpZ0VudiwgVXNlckNvbmZpZyB9IGZyb20gJ3ZpdGUnXG5pbXBvcnQgeyBsb2FkRW52IH0gZnJvbSAndml0ZSdcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJ1xuaW1wb3J0IHsgd3JhcHBlckVudiB9IGZyb20gJy4vYnVpbGQvdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVWaXRlUGx1Z2lucyB9IGZyb20gJy4vYnVpbGQvdml0ZS9wbHVnaW4nXG5pbXBvcnQgeyBPVVRQVVRfRElSIH0gZnJvbSAnLi9idWlsZC9jb25zdGFudCdcbmltcG9ydCB7IGNyZWF0ZVByb3h5IH0gZnJvbSAnLi9idWlsZC92aXRlL3Byb3h5J1xuaW1wb3J0IHBrZyBmcm9tICcuL3BhY2thZ2UuanNvbidcblxuY29uc3QgeyBkZXBlbmRlbmNpZXMsIGRldkRlcGVuZGVuY2llcywgbmFtZSwgdmVyc2lvbiB9ID0gcGtnXG5cbi8vIFx1NUY1M1x1NEY3Rlx1NzUyOFx1NjU4N1x1NEVGNlx1N0NGQlx1N0VERlx1OERFRlx1NUY4NFx1NzY4NFx1NTIyQlx1NTQwRFx1NjVGNlx1RkYwQ1x1OEJGN1x1NTlDQlx1N0VDOFx1NEY3Rlx1NzUyOFx1N0VERFx1NUJGOVx1OERFRlx1NUY4NFx1MzAwMlx1NzZGOFx1NUJGOVx1OERFRlx1NUY4NFx1NzY4NFx1NTIyQlx1NTQwRFx1NTAzQ1x1NEYxQVx1NTM5Rlx1NUMwMVx1NEUwRFx1NTJBOFx1NTczMFx1ODhBQlx1NEY3Rlx1NzUyOFx1RkYwQ1x1NTZFMFx1NkI2NFx1NjVFMFx1NkNENVx1ODhBQlx1NkI2M1x1NUUzOFx1ODlFM1x1Njc5MFx1MzAwMlxuLy8gcGF0aC5yZXNvbHZlICgpIFx1NjVCOVx1NkNENVx1NzUyOFx1NEU4RVx1NUMwNlx1NEUwMFx1N0NGQlx1NTIxN1x1OERFRlx1NUY4NFx1NkJCNVx1ODlFM1x1Njc5MFx1NEUzQVx1N0VERFx1NUJGOVx1OERFRlx1NUY4NFx1MzAwMlx1NUI4M1x1OTAxQVx1OEZDN1x1NTkwNFx1NzQwNlx1NEVDRVx1NTNGM1x1NTIzMFx1NURFNlx1NzY4NFx1OERFRlx1NUY4NFx1NUU4Rlx1NTIxN1x1Njc2NVx1NURFNVx1NEY1Q1x1RkYwQ1x1NTcyOFx1NkJDRlx1NEUyQVx1OERFRlx1NUY4NFx1NEU0Qlx1NTI0RFx1NkRGQlx1NTJBMFx1RkYwQ1x1NzZGNFx1NTIzMFx1NTIxQlx1NUVGQVx1N0VERFx1NUJGOVx1OERFRlx1NUY4NFx1MzAwMlxuZnVuY3Rpb24gcGF0aFJlc29sdmUoZGlyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4nLCBkaXIpXG59XG5cbmNvbnN0IF9fQVBQX0lORk9fXyA9IHtcbiAgLy8gQVBQIFx1NTQwRVx1NTNGMFx1N0JBMVx1NzQwNlx1NEZFMVx1NjA2RlxuICBwa2c6IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSxcbiAgLy8gXHU2NzAwXHU1NDBFXHU3RjE2XHU4QkQxXHU2NUY2XHU5NUY0XG4gIGxhc3RCdWlsZFRpbWU6IGZvcm1hdChuZXcgRGF0ZSgpLCAneXl5eS1NTS1kZCBISDptbTpzcycpLFxufVxuXG4vKiogQHR5cGUge2ltcG9ydCgndml0ZScpLlVzZXJDb25maWd9ICovXG5leHBvcnQgZGVmYXVsdCAoeyBjb21tYW5kLCBtb2RlIH06IENvbmZpZ0Vudik6IFVzZXJDb25maWcgPT4ge1xuICAvLyBwcm9jZXNzLmN3ZCgpIFx1NjVCOVx1NkNENVx1OEZENFx1NTZERSBOb2RlLmpzIFx1OEZEQlx1N0EwQlx1NzY4NFx1NUY1M1x1NTI0RFx1NURFNVx1NEY1Q1x1NzZFRVx1NUY1NVxuICAvLyBtb2RlIFx1OEZENFx1NTZERVx1NUU5NFx1NzUyOFx1NzY4NFx1NzNBRlx1NTg4M1x1NkEyMVx1NUYwRiBkZXZlbG9wbWVudFx1RkYwOFx1NUYwMFx1NTNEMVx1NzNBRlx1NTg4M1x1RkYwOSBcdTYyMTZcdTgwMDUgcHJvZHVjdGlvblx1RkYwOFx1NzUxRlx1NEVBN1x1NzNBRlx1NTg4M1x1RkYwOVxuICAvLyBjb21tYW5kIFx1OEZENFx1NTZERVx1RkYwOGRldi9zZXJ2ZSBcdTYyMTYgYnVpbGRcdUZGMDlcdTU0N0RcdTRFRTRcdTZBMjFcdTVGMEZcdUZGMEN5YXJuIGRldiBcdThGRDRcdTU2REUgZGV2L3NlcnZlIHlhcm4gYnVpbGQgXHU4RkQ0XHU1NkRFIGJ1aWxkXG4gIGNvbnN0IHJvb3QgPSBwcm9jZXNzLmN3ZCgpXG4gIC8vIGxvYWRFbnYoKSBcdTY4MzlcdTYzNkUgbW9kZSBcdTY4QzBcdTY3RTUgcm9vdChcdTk4NzlcdTc2RUVcdTY4MzlcdThERUZcdTVGODQpIFx1OERFRlx1NUY4NFx1NEUwQiAuZW52XHUzMDAxLmVudi5kZXZlbG9wbWVudCBcdTczQUZcdTU4ODNcdTY1ODdcdTRFRjZcdUZGMENcdThGOTNcdTUxRkEgTk9ERV9FTlYgXHU1NDhDIFZJVEVfIFx1NUYwMFx1NTkzNFx1NzY4NFx1OTUyRVx1NTAzQ1x1OTYxRlxuICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpXG4gIC8vIFx1OEJGQlx1NTNENlx1NUU3Nlx1NTkwNFx1NzQwNlx1NjI0MFx1NjcwOVx1NzNBRlx1NTg4M1x1NTNEOFx1OTFDRlx1OTE0RFx1N0Y2RVx1NjU4N1x1NEVGNiAuZW52XG4gIGNvbnN0IHZpdGVFbnYgPSB3cmFwcGVyRW52KGVudilcblxuICBjb25zdCB7IFZJVEVfUFVCTElDX1BBVEgsIFZJVEVfRFJPUF9DT05TT0xFLCBWSVRFX1BPUlQsIFZJVEVfUFJPWFksIFZJVEVfR0xPQl9QUk9EX01PQ0sgfVxuICAgID0gdml0ZUVudlxuXG4gIGNvbnN0IHByb2RNb2NrID0gVklURV9HTE9CX1BST0RfTU9DS1xuXG4gIGNvbnN0IGlzQnVpbGQgPSBjb21tYW5kID09PSAnYnVpbGQnXG4gIC8vIGNvbW1hbmQgPT09ICdidWlsZCdcbiAgcmV0dXJuIHtcbiAgICBiYXNlOiBWSVRFX1BVQkxJQ19QQVRILFxuICAgIHJvb3QsXG5cbiAgICAvLyBcdTUyMkJcdTU0MERcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczogW1xuICAgICAgICAvLyBAL3h4eHggPT4gc3JjL3h4eHhcbiAgICAgICAge1xuICAgICAgICAgIGZpbmQ6IC9cXEBcXC8vLFxuICAgICAgICAgIHJlcGxhY2VtZW50OiBgJHtwYXRoUmVzb2x2ZSgnc3JjJyl9L2AsXG4gICAgICAgIH0sXG4gICAgICAgIC8vICMveHh4eCA9PiB0eXBlcy94eHh4XG4gICAgICAgIHtcbiAgICAgICAgICBmaW5kOiAvXFwjXFwvLyxcbiAgICAgICAgICByZXBsYWNlbWVudDogYCR7cGF0aFJlc29sdmUoJ3R5cGVzJyl9L2AsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZGVkdXBlOiBbJ3Z1ZSddLFxuICAgIH0sXG5cbiAgICAvLyBcdTVCOUFcdTRFNDlcdTUxNjhcdTVDNDBcdTVFMzhcdTkxQ0ZcdTY2RkZcdTYzNjJcdTY1QjlcdTVGMEZcbiAgICBkZWZpbmU6IHtcbiAgICAgIC8vIFx1NTcyOFx1NzUxRlx1NEVBN1x1NEUyRCBcdTU0MkZcdTc1MjgvXHU3OTgxXHU3NTI4IGludGxpZnktZGV2dG9vbHMgXHU1NDhDIHZ1ZS1kZXZ0b29scyBcdTY1MkZcdTYzMDFcdUZGMENcdTlFRDhcdThCQTRcdTUwM0MgZmFsc2VcbiAgICAgIF9fSU5UTElGWV9QUk9EX0RFVlRPT0xTX186IGZhbHNlLFxuICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pLFxuICAgIH0sXG5cbiAgICBlc2J1aWxkOiB7XG4gICAgICAvLyBcdTRGN0ZcdTc1MjggZXNidWlsZCBcdTUzOEJcdTdGMjkgXHU1MjU0XHU5NjY0IGNvbnNvbGUubG9nXG4gICAgICBkcm9wOiBWSVRFX0RST1BfQ09OU09MRSA/IFsnZGVidWdnZXInLCAnY29uc29sZSddIDogW10sXG4gICAgICAvLyBtaW5pZnk6IHRydWUsIC8vIG1pbmlmeTogdHJ1ZSwgXHU3QjQ5XHU0RThFIG1pbmlmeTogJ2VzYnVpbGQnLFxuICAgIH0sXG5cbiAgICBidWlsZDoge1xuICAgICAgLy8gXHU4QkJFXHU3RjZFXHU2NzAwXHU3RUM4XHU2Nzg0XHU1RUZBXHU3Njg0XHU2RDRGXHU4OUM4XHU1NjY4XHU1MTdDXHU1QkI5XHU3NkVFXHU2ODA3XG4gICAgICB0YXJnZXQ6ICdlczIwMTUnLFxuICAgICAgbWluaWZ5OiAnZXNidWlsZCcsXG4gICAgICAvLyBcdTY3ODRcdTVFRkFcdTU0MEVcdTY2MkZcdTU0MjZcdTc1MUZcdTYyMTAgc291cmNlIG1hcCBcdTY1ODdcdTRFRjYoXHU3NTI4XHU0RThFXHU3RUJGXHU0RTBBXHU2MkE1XHU5NTE5XHU0RUUzXHU3ODAxXHU2MkE1XHU5NTE5XHU2NjIwXHU1QzA0XHU1QkY5XHU1RTk0XHU0RUUzXHU3ODAxKVxuICAgICAgc291cmNlbWFwOiBmYWxzZSxcbiAgICAgIGNzc1RhcmdldDogJ2Nocm9tZTgwJyxcbiAgICAgIC8vIFx1NjMwN1x1NUI5QVx1OEY5M1x1NTFGQVx1OERFRlx1NUY4NFx1RkYwOFx1NzZGOFx1NUJGOVx1NEU4RSBcdTk4NzlcdTc2RUVcdTY4MzlcdTc2RUVcdTVGNTUpXG4gICAgICBvdXREaXI6IE9VVFBVVF9ESVIsXG4gICAgICAvLyBcdTUzRUFcdTY3MDkgbWluaWZ5IFx1NEUzQSB0ZXJzZXIgXHU3Njg0XHU2NUY2XHU1MDE5LCBcdTY3MkNcdTkxNERcdTdGNkVcdTk4NzlcdTYyNERcdTgwRkRcdThENzdcdTRGNUNcdTc1MjhcbiAgICAgIC8vIHRlcnNlck9wdGlvbnM6IHtcbiAgICAgIC8vICAgY29tcHJlc3M6IHtcbiAgICAgIC8vICAgICAvLyBcdTk2MzJcdTZCNjIgSW5maW5pdHkgXHU4OEFCXHU1MzhCXHU3RjI5XHU2MjEwIDEvMFx1RkYwQ1x1OEZEOVx1NTNFRlx1ODBGRFx1NEYxQVx1NUJGQ1x1ODFGNCBDaHJvbWUgXHU0RTBBXHU3Njg0XHU2MDI3XHU4MEZEXHU5NUVFXHU5ODk4XG4gICAgICAvLyAgICAga2VlcF9pbmZpbml0eTogdHJ1ZSxcbiAgICAgIC8vICAgICAvLyBcdTYyNTNcdTUzMDVcdTY2MkZcdTU0MjZcdTgxRUFcdTUyQThcdTUyMjBcdTk2NjQgY29uc29sZVxuICAgICAgLy8gICAgIGRyb3BfY29uc29sZTogVklURV9EUk9QX0NPTlNPTEUsXG4gICAgICAvLyAgIH0sXG4gICAgICAvLyB9LFxuICAgICAgLy8gXHU1NDJGXHU3NTI4L1x1Nzk4MVx1NzUyOCBnemlwIFx1NTM4Qlx1N0YyOVx1NTkyN1x1NUMwRlx1NjJBNVx1NTQ0QVxuICAgICAgLy8gXHU1MzhCXHU3RjI5XHU1OTI3XHU1NzhCXHU4RjkzXHU1MUZBXHU2NTg3XHU0RUY2XHU1M0VGXHU4MEZEXHU0RjFBXHU1Rjg4XHU2MTYyXHVGRjBDXHU1NkUwXHU2QjY0XHU3OTgxXHU3NTI4XHU4QkU1XHU1MjlGXHU4MEZEXHU1M0VGXHU4MEZEXHU0RjFBXHU2M0QwXHU5QUQ4XHU1OTI3XHU1NzhCXHU5ODc5XHU3NkVFXHU3Njg0XHU2Nzg0XHU1RUZBXHU2MDI3XHU4MEZEXG4gICAgICByZXBvcnRDb21wcmVzc2VkU2l6ZTogdHJ1ZSxcbiAgICAgIC8vIGNodW5rIFx1NTkyN1x1NUMwRlx1OEI2Nlx1NTQ0QVx1NzY4NFx1OTY1MFx1NTIzNlx1RkYwOFx1NEVFNSBrYnMgXHU0RTNBXHU1MzU1XHU0RjREXHVGRjA5XG4gICAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDIwMDAsXG4gICAgICAvLyBcdTgxRUFcdTVCOUFcdTRFNDlcdTVFOTVcdTVDNDJcdTc2ODQgUm9sbHVwIFx1NjI1M1x1NTMwNVx1OTE0RFx1N0Y2RVxuICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAvLyBcdTk3NTlcdTYwMDFcdThENDRcdTZFOTBcdTUyMDZcdTdDN0JcdTYyNTNcdTUzMDVcbiAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgY2h1bmtGaWxlTmFtZXM6ICdqcy9bbmFtZV0tW2hhc2hdLmpzJywgLy8gXHU1RjE1XHU1MTY1XHU2NTg3XHU0RUY2XHU1NDBEXHU3Njg0XHU1NDBEXHU3OUYwXG4gICAgICAgICAgZW50cnlGaWxlTmFtZXM6ICdqcy9bbmFtZV0tW2hhc2hdLmpzJywgLy8gXHU1MzA1XHU3Njg0XHU1MTY1XHU1M0UzXHU2NTg3XHU0RUY2XHU1NDBEXHU3OUYwXG4gICAgICAgICAgYXNzZXRGaWxlTmFtZXM6ICdbZXh0XS9bbmFtZV0tW2hhc2hdLltleHRdJywgLy8gXHU4RDQ0XHU2RTkwXHU2NTg3XHU0RUY2XHU1MENGIFx1NUI1N1x1NEY1M1x1RkYwQ1x1NTZGRVx1NzI0N1x1N0I0OVxuICAgICAgICAgIC8vIFx1NUMwNiBub2RlX21vZHVsZXMgXHU0RTA5XHU2NUI5XHU0RjlEXHU4RDU2XHU1MzA1XHU2NzAwXHU1QzBGXHU1MzE2XHU2MkM2XHU1MjA2XG4gICAgICAgICAgbWFudWFsQ2h1bmtzKGlkKSB7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcycpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gaWQudG9TdHJpbmcoKS5zcGxpdCgnbm9kZV9tb2R1bGVzLycpXG4gICAgICAgICAgICAgIGlmIChwYXRoc1syXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXRoc1syXS5zcGxpdCgnLycpWzBdLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwYXRoc1sxXS5zcGxpdCgnLycpWzBdLnRvU3RyaW5nKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgY3NzOiB7XG4gICAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XG4gICAgICAgIGxlc3M6IHtcbiAgICAgICAgICBtb2RpZnlWYXJzOiB7fSxcbiAgICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAvLyBcdTZDRThcdTUxNjVcdTUxNjhcdTVDNDAgbGVzcyBcdTUzRDhcdTkxQ0ZcbiAgICAgICAgICBhZGRpdGlvbmFsRGF0YTogYEBpbXBvcnQgXCJzcmMvc3R5bGVzL3Zhci5sZXNzXCI7YCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHNlcnZlcjoge1xuICAgICAgaG9zdDogdHJ1ZSxcbiAgICAgIC8vIFx1NjcwRFx1NTJBMVx1NTQyRlx1NTJBOFx1NjVGNlx1NjYyRlx1NTQyNlx1ODFFQVx1NTJBOFx1NjI1M1x1NUYwMFx1NkQ0Rlx1ODlDOFx1NTY2OFxuICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgIC8vIFx1NjcwRFx1NTJBMVx1N0FFRlx1NTNFM1x1NTNGN1xuICAgICAgcG9ydDogTnVtYmVyKFZJVEVfUE9SVCksXG4gICAgICBwcm94eTogY3JlYXRlUHJveHkoVklURV9QUk9YWSksXG4gICAgICAvLyBcdTk4ODRcdTcwRURcdTY1ODdcdTRFRjZcdTRFRTVcdTk2NERcdTRGNEVcdTU0MkZcdTUyQThcdTY3MUZcdTk1RjRcdTc2ODRcdTUyMURcdTU5Q0JcdTk4NzVcdTk3NjJcdTUyQTBcdThGN0RcdTY1RjZcdTk1N0ZcbiAgICAgIHdhcm11cDoge1xuICAgICAgICAvLyBcdTk4ODRcdTcwRURcdTc2ODRcdTVCQTJcdTYyMzdcdTdBRUZcdTY1ODdcdTRFRjZcdUZGMUFcdTk5OTZcdTk4NzVcdTMwMDF2aWV3c1x1MzAwMSBjb21wb25lbnRzXG4gICAgICAgIGNsaWVudEZpbGVzOiBbJy4vaW5kZXguaHRtbCcsICcuL3NyYy97dmlld3MsY29tcG9uZW50c30vKiddLFxuICAgICAgfSxcbiAgICAgIC8vIHByb3h5OiB7XG4gICAgICAvLyAgICAgJy9hcGknOiB7XG4gICAgICAvLyAgICAgICAgIHRhcmdldDogJycsXG4gICAgICAvLyAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgIC8vICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZSgvXlxcL2FwaS8sICcvYXBpL3YxJylcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyB9XG4gICAgfSxcblxuICAgIG9wdGltaXplRGVwczoge1xuICAgICAgLyoqXG4gICAgICAgKiBcdTRGOURcdThENTZcdTk4ODRcdTY3ODRcdTVFRkFcdUZGMEN2aXRlIFx1NTQyRlx1NTJBOFx1NjVGNlx1NEYxQVx1NUMwNlx1NEUwQlx1OTc2MiBpbmNsdWRlIFx1OTFDQ1x1NzY4NFx1NkEyMVx1NTc1N1x1RkYwQ1x1N0YxNlx1OEJEMVx1NjIxMCBlc20gXHU2ODNDXHU1RjBGXHU1RTc2XHU3RjEzXHU1QjU4XHU1MjMwIG5vZGVfbW9kdWxlcy8udml0ZSBcdTY1ODdcdTRFRjZcdTU5MzlcdUZGMENcbiAgICAgICAqIFx1OTg3NVx1OTc2Mlx1NTJBMFx1OEY3RFx1NTIzMFx1NUJGOVx1NUU5NFx1NkEyMVx1NTc1N1x1NjVGNlx1NTk4Mlx1Njc5Q1x1NkQ0Rlx1ODlDOFx1NTY2OFx1NjcwOVx1N0YxM1x1NUI1OFx1NUMzMVx1OEJGQlx1NTNENlx1NkQ0Rlx1ODlDOFx1NTY2OFx1N0YxM1x1NUI1OFx1RkYwQ1x1NTk4Mlx1Njc5Q1x1NkNBMVx1NjcwOVx1NEYxQVx1OEJGQlx1NTNENlx1NjcyQ1x1NTczMFx1N0YxM1x1NUI1OFx1NUU3Nlx1NjMwOVx1OTcwMFx1NTJBMFx1OEY3RFxuICAgICAgICogXHU1QzI0XHU1MTc2XHU1RjUzXHU2MEE4XHU3OTgxXHU3NTI4XHU2RDRGXHU4OUM4XHU1NjY4XHU3RjEzXHU1QjU4XHU2NUY2XHVGRjA4XHU4RkQ5XHU3OUNEXHU2MEM1XHU1MUI1XHU1M0VBXHU1RTk0XHU4QkU1XHU1M0QxXHU3NTFGXHU1NzI4XHU4QzAzXHU4QkQ1XHU5NjM2XHU2QkI1XHVGRjA5XHU1RkM1XHU5ODdCXHU1QzA2XHU1QkY5XHU1RTk0XHU2QTIxXHU1NzU3XHU1MkEwXHU1MTY1XHU1MjMwIGluY2x1ZGUgXHU5MUNDXHVGRjBDXG4gICAgICAgKiBcdTU0MjZcdTUyMTlcdTRGMUFcdTkwNDdcdTUyMzBcdTVGMDBcdTUzRDFcdTczQUZcdTU4ODNcdTUyMDdcdTYzNjJcdTk4NzVcdTk3NjJcdTUzNjFcdTk4N0ZcdTc2ODRcdTk1RUVcdTk4OThcdUZGMDh2aXRlIFx1NEYxQVx1OEJBNFx1NEUzQVx1NUI4M1x1NjYyRlx1NEUwMFx1NEUyQVx1NjVCMFx1NzY4NFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NEYxQVx1OTFDRFx1NjVCMFx1NTJBMFx1OEY3RFx1NUU3Nlx1NUYzQVx1NTIzNlx1NTIzN1x1NjVCMFx1OTg3NVx1OTc2Mlx1RkYwOVx1RkYwQ1xuICAgICAgICogXHU1NkUwXHU0RTNBXHU1QjgzXHU2NUUyXHU2NUUwXHU2Q0Q1XHU0RjdGXHU3NTI4XHU2RDRGXHU4OUM4XHU1NjY4XHU3RjEzXHU1QjU4XHVGRjBDXHU1M0M4XHU2Q0ExXHU2NzA5XHU1NzI4XHU2NzJDXHU1NzMwIG5vZGVfbW9kdWxlcy8udml0ZSBcdTkxQ0NcdTdGMTNcdTVCNThcbiAgICAgICAqIFx1NkUyOVx1OTlBOFx1NjNEMFx1NzkzQVx1RkYxQVx1NTk4Mlx1Njc5Q1x1NEY2MFx1NEY3Rlx1NzUyOFx1NzY4NFx1N0IyQ1x1NEUwOVx1NjVCOVx1NUU5M1x1NjYyRlx1NTE2OFx1NUM0MFx1NUYxNVx1NTE2NVx1RkYwQ1x1NEU1Rlx1NUMzMVx1NjYyRlx1NUYxNVx1NTE2NVx1NTIzMCBzcmMvbWFpbi50cyBcdTY1ODdcdTRFRjZcdTkxQ0NcdUZGMENcbiAgICAgICAqIFx1NUMzMVx1NEUwRFx1OTcwMFx1ODk4MVx1NTE4RFx1NkRGQlx1NTJBMFx1NTIzMCBpbmNsdWRlIFx1OTFDQ1x1NEU4Nlx1RkYwQ1x1NTZFMFx1NEUzQSB2aXRlIFx1NEYxQVx1ODFFQVx1NTJBOFx1NUMwNlx1NUI4M1x1NEVFQ1x1N0YxM1x1NUI1OFx1NTIzMCBub2RlX21vZHVsZXMvLnZpdGVcbiAgICAgICAqL1xuICAgICAgaW5jbHVkZTogW1xuICAgICAgICAncGluaWEnLFxuICAgICAgICAnbG9kYXNoLWVzJyxcbiAgICAgICAgJ2F4aW9zJyxcbiAgICAgIF0sXG4gICAgICAvLyBcdTYyNTNcdTUzMDVcdTY1RjZcdTVGM0FcdTUyMzZcdTYzOTJcdTk2NjRcdTc2ODRcdTRGOURcdThENTZcdTk4NzlcbiAgICAgIGV4Y2x1ZGU6IFtcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cubXVsaW5neXVlci5jb20vYXJjaGl2ZXMvOTI4L1xuICAgICAgICAndmFudCcsXG4gICAgICAgICdAdmFudC91c2UnLFxuICAgICAgXSxcbiAgICB9LFxuXG4gICAgLy8gXHU1MkEwXHU4RjdEXHU2M0QyXHU0RUY2XG4gICAgcGx1Z2luczogY3JlYXRlVml0ZVBsdWdpbnModml0ZUVudiwgaXNCdWlsZCwgcHJvZE1vY2spLFxuICB9XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIlc6XFxcXFZTQ29kZVdvcmtzcGFjZVxcXFxcdTY2NkZcdTU3NUVcdTY3NTFcdTZDODlcdTZENzhcdTVGMEZcdTdFQTJcdTUzNzBcdTY1NzBcdTVCNTdcdTc4MTRcdTVCNjZcdTY4NDhcdTRGOEJINVxcXFxKaW5nd3UtdmlsbGFnZS1yZXNlYXJjaC1zdHVkeVxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiVzpcXFxcVlNDb2RlV29ya3NwYWNlXFxcXFx1NjY2Rlx1NTc1RVx1Njc1MVx1NkM4OVx1NkQ3OFx1NUYwRlx1N0VBMlx1NTM3MFx1NjU3MFx1NUI1N1x1NzgxNFx1NUI2Nlx1Njg0OFx1NEY4Qkg1XFxcXEppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5XFxcXGJ1aWxkXFxcXHV0aWxzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9XOi9WU0NvZGVXb3Jrc3BhY2UvJUU2JTk5JUFGJUU1JTlEJTlFJUU2JTlEJTkxJUU2JUIyJTg5JUU2JUI1JUI4JUU1JUJDJThGJUU3JUJBJUEyJUU1JThEJUIwJUU2JTk1JUIwJUU1JUFEJTk3JUU3JUEwJTk0JUU1JUFEJUE2JUU2JUExJTg4JUU0JUJFJThCSDUvSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHkvYnVpbGQvdXRpbHMudHNcIjtpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcydcclxuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJ1xyXG5pbXBvcnQgZG90ZW52IGZyb20gJ2RvdGVudidcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBtb2RlID09PSAnZGV2ZWxvcG1lbnQnXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICByZXR1cm4gbW9kZSA9PT0gJ3Byb2R1Y3Rpb24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBXaGV0aGVyIHRvIGdlbmVyYXRlIHBhY2thZ2UgcHJldmlld1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwb3J0TW9kZSgpOiBib29sZWFuIHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuUkVQT1JUID09PSAndHJ1ZSdcclxufVxyXG5cclxuLy8gUmVhZCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBwcm9jZXNzLmVudlxyXG4vLyBcdThCRkJcdTUzRDZcdTVFNzZcdTU5MDRcdTc0MDZcdTYyNDBcdTY3MDlcdTczQUZcdTU4ODNcdTUzRDhcdTkxQ0ZcdTkxNERcdTdGNkVcdTY1ODdcdTRFRjYgLmVudlxyXG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XHJcbiAgY29uc3QgcmV0OiBhbnkgPSB7fVxyXG5cclxuICBmb3IgKGNvbnN0IGVudk5hbWUgb2YgT2JqZWN0LmtleXMoZW52Q29uZikpIHtcclxuICAgIC8vIFx1NTNCQlx1OTY2NFx1N0E3QVx1NjgzQ1xyXG4gICAgbGV0IHJlYWxOYW1lID0gZW52Q29uZltlbnZOYW1lXS5yZXBsYWNlKC9cXFxcbi9nLCAnXFxuJylcclxuICAgIHJlYWxOYW1lID0gcmVhbE5hbWUgPT09ICd0cnVlJyA/IHRydWUgOiByZWFsTmFtZSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogcmVhbE5hbWVcclxuXHJcbiAgICBpZiAoZW52TmFtZSA9PT0gJ1ZJVEVfUE9SVCcpIHtcclxuICAgICAgcmVhbE5hbWUgPSBOdW1iZXIocmVhbE5hbWUpXHJcbiAgICB9XHJcbiAgICBpZiAoZW52TmFtZSA9PT0gJ1ZJVEVfUFJPWFknKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcmVhbE5hbWUgPSBKU09OLnBhcnNlKHJlYWxOYW1lKVxyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChlcnJvcikge31cclxuICAgIH1cclxuICAgIHJldFtlbnZOYW1lXSA9IHJlYWxOYW1lXHJcbiAgICBwcm9jZXNzLmVudltlbnZOYW1lXSA9IHJlYWxOYW1lXHJcbiAgfVxyXG4gIHJldHVybiByZXRcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN0YXJ0aW5nIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXhcclxuICogQHBhcmFtIG1hdGNoIHByZWZpeFxyXG4gKiBAcGFyYW0gY29uZkZpbGVzIGV4dFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudkNvbmZpZyhtYXRjaCA9ICdWSVRFX0dMT0JfJywgY29uZkZpbGVzID0gWycuZW52JywgJy5lbnYucHJvZHVjdGlvbiddKSB7XHJcbiAgbGV0IGVudkNvbmZpZyA9IHt9XHJcbiAgY29uZkZpbGVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGVudiA9IGRvdGVudi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGl0ZW0pKSlcclxuICAgICAgZW52Q29uZmlnID0geyAuLi5lbnZDb25maWcsIC4uLmVudiB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHt9XHJcbiAgfSlcclxuXHJcbiAgT2JqZWN0LmtleXMoZW52Q29uZmlnKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYF4oJHttYXRjaH0pYClcclxuICAgIGlmICghcmVnLnRlc3Qoa2V5KSkge1xyXG4gICAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGVudkNvbmZpZywga2V5KVxyXG4gICAgfVxyXG4gIH0pXHJcbiAgcmV0dXJuIGVudkNvbmZpZ1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHVzZXIgcm9vdCBkaXJlY3RvcnlcclxuICogQHBhcmFtIGRpciBmaWxlIHBhdGhcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290UGF0aCguLi5kaXI6IHN0cmluZ1tdKSB7XHJcbiAgcmV0dXJuIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAuLi5kaXIpXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJXOlxcXFxWU0NvZGVXb3Jrc3BhY2VcXFxcXHU2NjZGXHU1NzVFXHU2NzUxXHU2Qzg5XHU2RDc4XHU1RjBGXHU3RUEyXHU1MzcwXHU2NTcwXHU1QjU3XHU3ODE0XHU1QjY2XHU2ODQ4XHU0RjhCSDVcXFxcSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHlcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIlc6XFxcXFZTQ29kZVdvcmtzcGFjZVxcXFxcdTY2NkZcdTU3NUVcdTY3NTFcdTZDODlcdTZENzhcdTVGMEZcdTdFQTJcdTUzNzBcdTY1NzBcdTVCNTdcdTc4MTRcdTVCNjZcdTY4NDhcdTRGOEJINVxcXFxKaW5nd3UtdmlsbGFnZS1yZXNlYXJjaC1zdHVkeVxcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblxcXFxpbmRleC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVzovVlNDb2RlV29ya3NwYWNlLyVFNiU5OSVBRiVFNSU5RCU5RSVFNiU5RCU5MSVFNiVCMiU4OSVFNiVCNSVCOCVFNSVCQyU4RiVFNyVCQSVBMiVFNSU4RCVCMCVFNiU5NSVCMCVFNSVBRCU5NyVFNyVBMCU5NCVFNSVBRCVBNiVFNiVBMSU4OCVFNCVCRSU4Qkg1L0ppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5L2J1aWxkL3ZpdGUvcGx1Z2luL2luZGV4LnRzXCI7aW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgQ29tcG9uZW50cyBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy92aXRlJ1xyXG5pbXBvcnQgeyBWYW50UmVzb2x2ZXIgfSBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy9yZXNvbHZlcnMnXHJcbmltcG9ydCB2dWUgZnJvbSAnQHZpdGVqcy9wbHVnaW4tdnVlJ1xyXG5pbXBvcnQgVW5vQ1NTIGZyb20gJ3Vub2Nzcy92aXRlJ1xyXG5pbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJ1xyXG5pbXBvcnQgeyBjb25maWdIdG1sUGx1Z2luIH0gZnJvbSAnLi9odG1sJ1xyXG5pbXBvcnQgeyBjb25maWdNb2NrUGx1Z2luIH0gZnJvbSAnLi9tb2NrJ1xyXG5pbXBvcnQgeyBjb25maWdDb21wcmVzc1BsdWdpbiB9IGZyb20gJy4vY29tcHJlc3MnXHJcbmltcG9ydCB7IGNvbmZpZ1Zpc3VhbGl6ZXJDb25maWcgfSBmcm9tICcuL3Zpc3VhbGl6ZXInXHJcbmltcG9ydCB7IGNvbmZpZ1N2Z0ljb25zUGx1Z2luIH0gZnJvbSAnLi9zdmdTcHJpdGUnXHJcblxyXG4vKipcclxuICogXHU5MTREXHU3RjZFIHZpdGUgXHU2M0QyXHU0RUY2XHJcbiAqIEBwYXJhbSB2aXRlRW52IHZpdGUgXHU3M0FGXHU1ODgzXHU1M0Q4XHU5MUNGXHU5MTREXHU3RjZFXHU2NTg3XHU0RUY2XHU5NTJFXHU1MDNDXHU5NjFGIG9iamVjdFxyXG4gKiBAcGFyYW0gaXNCdWlsZCBcdTY2MkZcdTU0MjZcdTY2MkYgYnVpbGQgXHU3M0FGXHU1ODgzIHRydWUvZmFsc2VcclxuICogQHJldHVybnMgdml0ZVBsdWdpbnNbXVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZpdGVQbHVnaW5zKHZpdGVFbnY6IFZpdGVFbnYsIGlzQnVpbGQ6IGJvb2xlYW4sIHByb2RNb2NrOiBib29sZWFuKSB7XHJcbiAgLy8gVklURV9CVUlMRF9DT01QUkVTUyBcdTY2MkZcdTU0MjZcdTU0MkZcdTc1MjggZ3ppcCBcdTUzOEJcdTdGMjlcdTYyMTYgYnJvdGxpIFx1NTM4Qlx1N0YyOVxyXG4gIC8vIFx1NTNFRlx1OTAwOTogZ3ppcCB8IGJyb3RsaSB8IG5vbmVcdUZGMENcclxuICAvLyBcdTU5ODJcdTY3OUNcdTRGNjBcdTk3MDBcdTg5ODFcdTU5MUFcdTc5Q0RcdTVGNjJcdTVGMEZcdUZGMENcdTRGNjBcdTUzRUZcdTRFRTVcdTc1MjgnLCdcdTY3NjVcdTUyMDZcdTk2OTRcclxuXHJcbiAgLy8gVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEUgXHU2MjUzXHU1MzA1XHU0RjdGXHU3NTI4XHU1MzhCXHU3RjI5XHU2NUY2XHU2NjJGXHU1NDI2XHU1MjIwXHU5NjY0XHU1MzlGXHU1OUNCXHU2NTg3XHU0RUY2XHVGRjBDXHU5RUQ4XHU4QkE0XHU0RTNBIGZhbHNlXHJcbiAgY29uc3QgeyBWSVRFX1VTRV9NT0NLLCBWSVRFX0JVSUxEX0NPTVBSRVNTLCBWSVRFX0JVSUxEX0NPTVBSRVNTX0RFTEVURV9PUklHSU5fRklMRSB9ID0gdml0ZUVudlxyXG5cclxuICBjb25zdCB2aXRlUGx1Z2luczogKFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdKVtdID0gW1xyXG4gICAgLy8gaGF2ZSB0b1xyXG4gICAgdnVlKCksXHJcbiAgICAvLyBcdTYzMDlcdTk3MDBcdTVGMTVcdTUxNjVWYW50VWlcdTRFMTRcdTgxRUFcdTUyQThcdTUyMUJcdTVFRkFcdTdFQzRcdTRFRjZcdTU4RjBcdTY2MEVcclxuICAgIENvbXBvbmVudHMoe1xyXG4gICAgICBkdHM6IHRydWUsXHJcbiAgICAgIHJlc29sdmVyczogW1ZhbnRSZXNvbHZlcigpXSxcclxuICAgICAgdHlwZXM6IFtdLFxyXG4gICAgfSksXHJcbiAgICAvLyBVbm9DU1NcclxuICAgIFVub0NTUygpLFxyXG5cclxuICAgIEF1dG9JbXBvcnQoe1xyXG4gICAgICAvLyB0YXJnZXRzIHRvIHRyYW5zZm9ybVxyXG4gICAgICBpbmNsdWRlOiBbXHJcbiAgICAgICAgL1xcLlt0al1zeD8kLywgLy8gLnRzLCAudHN4LCAuanMsIC5qc3hcclxuICAgICAgICAvXFwudnVlJC8sXHJcbiAgICAgICAgL1xcLnZ1ZVxcP3Z1ZS8sIC8vIC52dWVcclxuICAgICAgXSxcclxuICAgICAgaW1wb3J0czogW1xyXG4gICAgICAgIC8vIHByZXNldHNcclxuICAgICAgICAndnVlJyxcclxuICAgICAgICAndnVlLXJvdXRlcicsXHJcbiAgICAgICAgJ3BpbmlhJyxcclxuICAgICAgICAnQHZ1ZXVzZS9jb3JlJyxcclxuICAgICAgXSxcclxuICAgICAgZHRzOiAndHlwZXMvYXV0by1pbXBvcnRzLmQudHMnLFxyXG4gICAgfSksXHJcbiAgXVxyXG5cclxuICAvLyBcdTUyQTBcdThGN0QgaHRtbCBcdTYzRDJcdTRFRjYgdml0ZS1wbHVnaW4taHRtbFxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY29uZmlnSHRtbFBsdWdpbih2aXRlRW52LCBpc0J1aWxkKSlcclxuXHJcbiAgLy8gcm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXHJcbiAgdml0ZVBsdWdpbnMucHVzaChjb25maWdWaXN1YWxpemVyQ29uZmlnKCkpXHJcblxyXG4gIC8vIHZpdGUtcGx1Z2luLW1vY2tcclxuICBWSVRFX1VTRV9NT0NLICYmIHZpdGVQbHVnaW5zLnB1c2goY29uZmlnTW9ja1BsdWdpbihpc0J1aWxkLCBwcm9kTW9jaykpXHJcblxyXG4gIC8vIHZpdGUtcGx1Z2luLXN2Zy1pY29uc1xyXG4gIHZpdGVQbHVnaW5zLnB1c2goY29uZmlnU3ZnSWNvbnNQbHVnaW4oaXNCdWlsZCkpXHJcblxyXG4gIGlmIChpc0J1aWxkKSB7XHJcbiAgICAvLyByb2xsdXAtcGx1Z2luLWd6aXBcclxuICAgIC8vIFx1NTJBMFx1OEY3RCBnemlwIFx1NjI1M1x1NTMwNVxyXG4gICAgdml0ZVBsdWdpbnMucHVzaChcclxuICAgICAgY29uZmlnQ29tcHJlc3NQbHVnaW4oVklURV9CVUlMRF9DT01QUkVTUywgVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEUpLFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHZpdGVQbHVnaW5zXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJXOlxcXFxWU0NvZGVXb3Jrc3BhY2VcXFxcXHU2NjZGXHU1NzVFXHU2NzUxXHU2Qzg5XHU2RDc4XHU1RjBGXHU3RUEyXHU1MzcwXHU2NTcwXHU1QjU3XHU3ODE0XHU1QjY2XHU2ODQ4XHU0RjhCSDVcXFxcSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHlcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIlc6XFxcXFZTQ29kZVdvcmtzcGFjZVxcXFxcdTY2NkZcdTU3NUVcdTY3NTFcdTZDODlcdTZENzhcdTVGMEZcdTdFQTJcdTUzNzBcdTY1NzBcdTVCNTdcdTc4MTRcdTVCNjZcdTY4NDhcdTRGOEJINVxcXFxKaW5nd3UtdmlsbGFnZS1yZXNlYXJjaC1zdHVkeVxcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblxcXFxodG1sLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9XOi9WU0NvZGVXb3Jrc3BhY2UvJUU2JTk5JUFGJUU1JTlEJTlFJUU2JTlEJTkxJUU2JUIyJTg5JUU2JUI1JUI4JUU1JUJDJThGJUU3JUJBJUEyJUU1JThEJUIwJUU2JTk1JUIwJUU1JUFEJTk3JUU3JUEwJTk0JUU1JUFEJUE2JUU2JUExJTg4JUU0JUJFJThCSDUvSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHkvYnVpbGQvdml0ZS9wbHVnaW4vaHRtbC50c1wiOy8qKlxyXG4gKiBQbHVnaW4gdG8gbWluaW1pemUgYW5kIHVzZSBlanMgdGVtcGxhdGUgc3ludGF4IGluIGluZGV4Lmh0bWwuXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbm5jd2Ivdml0ZS1wbHVnaW4taHRtbFxyXG4gKi9cclxuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgeyBjcmVhdGVIdG1sUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4taHRtbCdcclxuaW1wb3J0IHBrZyBmcm9tICcuLi8uLi8uLi9wYWNrYWdlLmpzb24nXHJcbmltcG9ydCB7IEdMT0JfQ09ORklHX0ZJTEVfTkFNRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50J1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ0h0bWxQbHVnaW4oZW52OiBWaXRlRW52LCBpc0J1aWxkOiBib29sZWFuKSB7XHJcbiAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1BVQkxJQ19QQVRIIH0gPSBlbnZcclxuXHJcbiAgY29uc3QgcGF0aCA9IFZJVEVfUFVCTElDX1BBVEguZW5kc1dpdGgoJy8nKSA/IFZJVEVfUFVCTElDX1BBVEggOiBgJHtWSVRFX1BVQkxJQ19QQVRIfS9gXHJcblxyXG4gIGNvbnN0IGdldEFwcENvbmZpZ1NyYyA9ICgpID0+IHtcclxuICAgIHJldHVybiBgJHtwYXRoIHx8ICcvJ30ke0dMT0JfQ09ORklHX0ZJTEVfTkFNRX0/dj0ke3BrZy52ZXJzaW9ufS0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWBcclxuICB9XHJcblxyXG4gIC8vIFx1NUY1M1x1NjI2N1x1ODg0QyB5YXJuIGJ1aWxkIFx1Njc4NFx1NUVGQVx1OTg3OVx1NzZFRVx1NEU0Qlx1NTQwRVx1RkYwQ1x1NEYxQVx1ODFFQVx1NTJBOFx1NzUxRlx1NjIxMCBfYXBwLmNvbmZpZy5qcyBcdTY1ODdcdTRFRjZcdTVFNzZcdTYzRDJcdTUxNjUgaW5kZXguaHRtbFxyXG4gIC8vIF9hcHAuY29uZmlnLmpzIFx1NzUyOFx1NEU4RVx1OTg3OVx1NzZFRVx1NTcyOFx1NjI1M1x1NTMwNVx1NTQwRVx1RkYwQ1x1OTcwMFx1ODk4MVx1NTJBOFx1NjAwMVx1NEZFRVx1NjUzOVx1OTE0RFx1N0Y2RVx1NzY4NFx1OTcwMFx1NkM0Mlx1RkYwQ1x1NTk4Mlx1NjNBNVx1NTNFM1x1NTczMFx1NTc0MFxyXG4gIC8vIFx1NEUwRFx1NzUyOFx1OTFDRFx1NjVCMFx1OEZEQlx1ODg0Q1x1NjI1M1x1NTMwNVx1RkYwQ1x1NTNFRlx1NTcyOFx1NjI1M1x1NTMwNVx1NTQwRVx1NEZFRVx1NjUzOSAvZGlzdC9fYXBwLmNvbmZpZy5qcyBcdTUxODVcdTc2ODRcdTUzRDhcdTkxQ0ZcdUZGMENcdTUyMzdcdTY1QjBcdTUzNzNcdTUzRUZcdTY2RjRcdTY1QjBcdTRFRTNcdTc4MDFcdTUxODVcdTc2ODRcdTVDNDBcdTkwRThcdTUzRDhcdTkxQ0ZcclxuXHJcbiAgY29uc3QgaHRtbFBsdWdpbjogUGx1Z2luT3B0aW9uW10gPSBjcmVhdGVIdG1sUGx1Z2luKHtcclxuICAgIG1pbmlmeTogaXNCdWlsZCxcclxuICAgIGluamVjdDoge1xyXG4gICAgICAvLyBJbmplY3QgZGF0YSBpbnRvIGVqcyB0ZW1wbGF0ZVxyXG4gICAgICAvLyBcdTk3MDBcdTg5ODFcdTZDRThcdTUxNjUgaW5kZXguaHRtbCBlanMgXHU2QTIxXHU3MjQ4XHU3Njg0XHU2NTcwXHU2MzZFIFx1NEY3Rlx1NzUyOFx1NTcyOCBodG1sIFx1NEUyRCBcdUZGMUE8ZGl2PjwlPSB0aXRsZSAlPjwvZGl2PlxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgdGl0bGU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvLyBFbWJlZCB0aGUgZ2VuZXJhdGVkIGFwcC5jb25maWcuanMgZmlsZSBcdTk3MDBcdTg5ODFcdTZDRThcdTUxNjVcdTc2ODRcdTY4MDdcdTdCN0VcdTUyMTdcdTg4NjhcclxuICAgICAgdGFnczogaXNCdWlsZFxyXG4gICAgICAgID8gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdGFnOiAnc2NyaXB0JyxcclxuICAgICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgc3JjOiBnZXRBcHBDb25maWdTcmMoKSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIDogW10sXHJcbiAgICB9LFxyXG4gIH0pXHJcbiAgcmV0dXJuIGh0bWxQbHVnaW5cclxufVxyXG4iLCAie1xyXG4gIFwibmFtZVwiOiBcInZ1ZTMtdmFudDQtbW9iaWxlXCIsXHJcbiAgXCJ0eXBlXCI6IFwibW9kdWxlXCIsXHJcbiAgXCJ2ZXJzaW9uXCI6IFwiMi4xLjBcIixcclxuICBcInByaXZhdGVcIjogdHJ1ZSxcclxuICBcInBhY2thZ2VNYW5hZ2VyXCI6IFwicG5wbUA5LjguMFwiLFxyXG4gIFwiYXV0aG9yXCI6IHtcclxuICAgIFwibmFtZVwiOiBcInhpYW5nc2h1MjMzXCIsXHJcbiAgICBcImVtYWlsXCI6IFwieGlhbmdzaHUyMzNAb3V0bG9vay5jb21cIixcclxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3hpYW5nc2h1MjMzXCJcclxuICB9LFxyXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxyXG4gIFwicmVwb3NpdG9yeVwiOiB7XHJcbiAgICBcInR5cGVcIjogXCJnaXRcIixcclxuICAgIFwidXJsXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS94aWFuZ3NodTIzMy92dWUzLXZhbnQ0LW1vYmlsZS5naXRcIlxyXG4gIH0sXHJcbiAgXCJidWdzXCI6IHtcclxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3hpYW5nc2h1MjMzL3Z1ZTMtdmFudDQtbW9iaWxlL2lzc3Vlc1wiXHJcbiAgfSxcclxuICBcImVuZ2luZXNcIjoge1xyXG4gICAgXCJub2RlXCI6IFwiXjIwLjkuMCB8fCA+PTIxLjcuMVwiLFxyXG4gICAgXCJwbnBtXCI6IFwiPj04LjE1LjRcIlxyXG4gIH0sXHJcbiAgXCJzY3JpcHRzXCI6IHtcclxuICAgIFwicHJlaW5zdGFsbFwiOiBcIm5weCBvbmx5LWFsbG93IHBucG1cIixcclxuICAgIFwiYm9vdHN0cmFwXCI6IFwicG5wbSBpbnN0YWxsXCIsXHJcbiAgICBcInNlcnZlXCI6IFwibnBtIHJ1biBkZXZcIixcclxuICAgIFwiZGV2XCI6IFwiY3Jvc3MtZW52IFZJVEVfQ0pTX0lHTk9SRV9XQVJOSU5HPXRydWUgdml0ZSBkZXZcIixcclxuICAgIFwiZGV2OmRlYnVnY2pzXCI6IFwiY3Jvc3MtZW52IFZJVEVfQ0pTX1RSQUNFPXRydWUgdml0ZSBkZXZcIixcclxuICAgIFwiYnVpbGRcIjogXCJjcm9zcy1lbnYgTk9ERV9FTlY9cHJvZHVjdGlvbiB2aXRlIGJ1aWxkICYmIGVzbm8gLi9idWlsZC9zY3JpcHQvcG9zdEJ1aWxkLnRzXCIsXHJcbiAgICBcImJ1aWxkOm5vLWNhY2hlXCI6IFwicG5wbSBjbGVhbjpjYWNoZSAmJiBucG0gcnVuIGJ1aWxkXCIsXHJcbiAgICBcInJlcG9ydFwiOiBcImNyb3NzLWVudiBSRVBPUlQ9dHJ1ZSBucG0gcnVuIGJ1aWxkXCIsXHJcbiAgICBcInR5cGU6Y2hlY2tcIjogXCJ2dWUtdHNjIC0tbm9FbWl0IC0tc2tpcExpYkNoZWNrXCIsXHJcbiAgICBcInByZXZpZXdcIjogXCJ2aXRlIHByZXZpZXdcIixcclxuICAgIFwiY2xlYW46Y2FjaGVcIjogXCJyaW1yYWYgbm9kZV9tb2R1bGVzLy5jYWNoZS8gJiYgcmltcmFmIG5vZGVfbW9kdWxlcy8udml0ZVwiLFxyXG4gICAgXCJjbGVhbjpsaWJcIjogXCJyaW1yYWYgbm9kZV9tb2R1bGVzXCIsXHJcbiAgICBcImxpbnRcIjogXCJlc2xpbnQgLlwiLFxyXG4gICAgXCJsaW50OmZpeFwiOiBcImVzbGludCAuIC0tZml4XCIsXHJcbiAgICBcImxpbnQ6bGludC1zdGFnZWRcIjogXCJsaW50LXN0YWdlZFwiXHJcbiAgfSxcclxuICBcImRlcGVuZGVuY2llc1wiOiB7XHJcbiAgICBcIkB0eXBlcy9sb2Rhc2gtZXNcIjogXCJeNC4xNy4xMlwiLFxyXG4gICAgXCJAdHlwZXMvcXJjb2RlXCI6IFwiXjEuNS41XCIsXHJcbiAgICBcIkB1bm9jc3MvcmVzZXRcIjogXCJeMC41OC41XCIsXHJcbiAgICBcIkB2dWV1c2UvY29yZVwiOiBcIl4xMC43LjBcIixcclxuICAgIFwiYXhpb3NcIjogXCJeMS40LjBcIixcclxuICAgIFwiZGF0ZS1mbnNcIjogXCJeMy4wLjZcIixcclxuICAgIFwiZWNoYXJ0c1wiOiBcIl41LjQuM1wiLFxyXG4gICAgXCJodG1sNS1xcmNvZGVcIjogXCJeMi4zLjhcIixcclxuICAgIFwibG9kYXNoLWVzXCI6IFwiXjQuMTcuMjFcIixcclxuICAgIFwibW9ja2pzXCI6IFwiXjEuMS4wXCIsXHJcbiAgICBcIm5wcm9ncmVzc1wiOiBcIl4wLjIuMFwiLFxyXG4gICAgXCJwaW5pYVwiOiBcIl4yLjEuN1wiLFxyXG4gICAgXCJwaW5pYS1wbHVnaW4tcGVyc2lzdFwiOiBcIl4xLjAuMFwiLFxyXG4gICAgXCJxcmNvZGVcIjogXCJeMS41LjRcIixcclxuICAgIFwicXNcIjogXCJeNi4xMS4yXCIsXHJcbiAgICBcInZhbnRcIjogXCJeNC44LjFcIixcclxuICAgIFwidnVlXCI6IFwiXjMuMy4xM1wiLFxyXG4gICAgXCJ2dWUtcXJjb2RlLXJlYWRlclwiOiBcIl41LjUuOFwiLFxyXG4gICAgXCJ2dWUtcm91dGVyXCI6IFwiNC4yLjVcIixcclxuICAgIFwidnVlZHJhZ2dhYmxlXCI6IFwiXjQuMS4wXCIsXHJcbiAgICBcIndjLWZsb3ctbGF5b3V0XCI6IFwiXjAuMC41XCJcclxuICB9LFxyXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcclxuICAgIFwiQGFudGZ1L2VzbGludC1jb25maWdcIjogXCJeMi42LjNcIixcclxuICAgIFwiQGNvbW1pdGxpbnQvY2xpXCI6IFwiXjE4LjQuM1wiLFxyXG4gICAgXCJAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsXCI6IFwiXjE4LjQuM1wiLFxyXG4gICAgXCJAaWNvbmlmeS9qc29uXCI6IFwiXjIuMi4xODhcIixcclxuICAgIFwiQHR5cGVzL2ZzLWV4dHJhXCI6IFwiXjExLjAuNFwiLFxyXG4gICAgXCJAdHlwZXMvbW9ja2pzXCI6IFwiXjEuMC4xMFwiLFxyXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC4xMC41XCIsXHJcbiAgICBcIkB0eXBlcy9ucHJvZ3Jlc3NcIjogXCJeMC4yLjNcIixcclxuICAgIFwiQHR5cGVzL3FzXCI6IFwiXjYuOS4xMVwiLFxyXG4gICAgXCJAdW5vY3NzL2VzbGludC1wbHVnaW5cIjogXCJeMC41OC40XCIsXHJcbiAgICBcIkB1bm9jc3MvcHJlc2V0LWljb25zXCI6IFwiXjAuNTguNVwiLFxyXG4gICAgXCJAdW5vY3NzL3ByZXNldC1yZW0tdG8tcHhcIjogXCJeMC41OC41XCIsXHJcbiAgICBcIkB1bm9jc3MvdHJhbnNmb3JtZXItZGlyZWN0aXZlc1wiOiBcIl4wLjU4LjRcIixcclxuICAgIFwiQHVub2Nzcy90cmFuc2Zvcm1lci12YXJpYW50LWdyb3VwXCI6IFwiXjAuNTguNFwiLFxyXG4gICAgXCJAdml0ZWpzL3BsdWdpbi12dWVcIjogXCJeNS4wLjBcIixcclxuICAgIFwiYXV0b3ByZWZpeGVyXCI6IFwiXjEwLjQuMTZcIixcclxuICAgIFwiY3Jvc3MtZW52XCI6IFwiXjcuMC4zXCIsXHJcbiAgICBcImN6LWdpdFwiOiBcIl4xLjguMFwiLFxyXG4gICAgXCJkb3RlbnZcIjogXCJeMTYuMy4xXCIsXHJcbiAgICBcImVzbGludFwiOiBcIl44LjU2LjBcIixcclxuICAgIFwiZXNsaW50LXBsdWdpbi1mb3JtYXRcIjogXCJeMC4xLjBcIixcclxuICAgIFwiZXNub1wiOiBcIl4wLjE2LjNcIixcclxuICAgIFwiZnMtZXh0cmFcIjogXCJeMTEuMi4wXCIsXHJcbiAgICBcImxlc3NcIjogXCJeNC4yLjBcIixcclxuICAgIFwibGludC1zdGFnZWRcIjogXCJeMTUuMi4wXCIsXHJcbiAgICBcIm9ubHktYWxsb3dcIjogXCJeMS4yLjFcIixcclxuICAgIFwicGljb2NvbG9yc1wiOiBcIl4xLjAuMFwiLFxyXG4gICAgXCJwb3N0Y3NzXCI6IFwiXjguNC4zMlwiLFxyXG4gICAgXCJwb3N0Y3NzLW1vYmlsZS1mb3JldmVyXCI6IFwiXjQuMC4wXCIsXHJcbiAgICBcInJpbXJhZlwiOiBcIl4zLjAuMlwiLFxyXG4gICAgXCJyb2xsdXBcIjogXCJeNC45LjFcIixcclxuICAgIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI6IFwiXjUuMTEuMFwiLFxyXG4gICAgXCJzYXNzLWVtYmVkZGVkXCI6IFwiXjEuNzguMFwiLFxyXG4gICAgXCJzaW1wbGUtZ2l0LWhvb2tzXCI6IFwiXjIuOS4wXCIsXHJcbiAgICBcInR5cGVzY3JpcHRcIjogXCJeNS4zLjNcIixcclxuICAgIFwidW5vY3NzXCI6IFwiXjAuNTguNVwiLFxyXG4gICAgXCJ1bnBsdWdpbi1hdXRvLWltcG9ydFwiOiBcIl4wLjE3LjVcIixcclxuICAgIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHNcIjogXCJeMC4yNi4wXCIsXHJcbiAgICBcInZpdGVcIjogXCJeNS4wLjEwXCIsXHJcbiAgICBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI6IFwiXjAuNS4xXCIsXHJcbiAgICBcInZpdGUtcGx1Z2luLWh0bWxcIjogXCJeMy4yLjJcIixcclxuICAgIFwidml0ZS1wbHVnaW4tbW9ja1wiOiBcIl4yLjkuOFwiLFxyXG4gICAgXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjogXCJeMi4wLjFcIixcclxuICAgIFwidnVlLXRzY1wiOiBcIl4xLjguMjdcIlxyXG4gIH0sXHJcbiAgXCJzaW1wbGUtZ2l0LWhvb2tzXCI6IHtcclxuICAgIFwicHJlLWNvbW1pdFwiOiBcInBucG0gbGludC1zdGFnZWRcIixcclxuICAgIFwiY29tbWl0LW1zZ1wiOiBcIm5weCAtLW5vLWluc3RhbGwgY29tbWl0bGludCAtLWVkaXQgJDFcIlxyXG4gIH0sXHJcbiAgXCJsaW50LXN0YWdlZFwiOiB7XHJcbiAgICBcIipcIjogXCJlc2xpbnQgLS1maXhcIlxyXG4gIH0sXHJcbiAgXCJjb25maWdcIjoge1xyXG4gICAgXCJjb21taXRpemVuXCI6IHtcclxuICAgICAgXCJwYXRoXCI6IFwibm9kZV9tb2R1bGVzL2N6LWdpdFwiXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiVzpcXFxcVlNDb2RlV29ya3NwYWNlXFxcXFx1NjY2Rlx1NTc1RVx1Njc1MVx1NkM4OVx1NkQ3OFx1NUYwRlx1N0VBMlx1NTM3MFx1NjU3MFx1NUI1N1x1NzgxNFx1NUI2Nlx1Njg0OFx1NEY4Qkg1XFxcXEppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5XFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJXOlxcXFxWU0NvZGVXb3Jrc3BhY2VcXFxcXHU2NjZGXHU1NzVFXHU2NzUxXHU2Qzg5XHU2RDc4XHU1RjBGXHU3RUEyXHU1MzcwXHU2NTcwXHU1QjU3XHU3ODE0XHU1QjY2XHU2ODQ4XHU0RjhCSDVcXFxcSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHlcXFxcYnVpbGRcXFxcY29uc3RhbnQudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1c6L1ZTQ29kZVdvcmtzcGFjZS8lRTYlOTklQUYlRTUlOUQlOUUlRTYlOUQlOTElRTYlQjIlODklRTYlQjUlQjglRTUlQkMlOEYlRTclQkElQTIlRTUlOEQlQjAlRTYlOTUlQjAlRTUlQUQlOTclRTclQTAlOTQlRTUlQUQlQTYlRTYlQTElODglRTQlQkUlOEJINS9KaW5nd3UtdmlsbGFnZS1yZXNlYXJjaC1zdHVkeS9idWlsZC9jb25zdGFudC50c1wiOy8qKlxyXG4gKiBUaGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGVudGVyZWQgaW4gdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcclxuICovXHJcbmV4cG9ydCBjb25zdCBHTE9CX0NPTkZJR19GSUxFX05BTUUgPSAnYXBwLmNvbmZpZy5qcydcclxuXHJcbmV4cG9ydCBjb25zdCBPVVRQVVRfRElSID0gJ2Rpc3QvdmFudC1tb2JpbGUnXHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiVzpcXFxcVlNDb2RlV29ya3NwYWNlXFxcXFx1NjY2Rlx1NTc1RVx1Njc1MVx1NkM4OVx1NkQ3OFx1NUYwRlx1N0VBMlx1NTM3MFx1NjU3MFx1NUI1N1x1NzgxNFx1NUI2Nlx1Njg0OFx1NEY4Qkg1XFxcXEppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5XFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJXOlxcXFxWU0NvZGVXb3Jrc3BhY2VcXFxcXHU2NjZGXHU1NzVFXHU2NzUxXHU2Qzg5XHU2RDc4XHU1RjBGXHU3RUEyXHU1MzcwXHU2NTcwXHU1QjU3XHU3ODE0XHU1QjY2XHU2ODQ4XHU0RjhCSDVcXFxcSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHlcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcbW9jay50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVzovVlNDb2RlV29ya3NwYWNlLyVFNiU5OSVBRiVFNSU5RCU5RSVFNiU5RCU5MSVFNiVCMiU4OSVFNiVCNSVCOCVFNSVCQyU4RiVFNyVCQSVBMiVFNSU4RCVCMCVFNiU5NSVCMCVFNSVBRCU5NyVFNyVBMCU5NCVFNSVBRCVBNiVFNiVBMSU4OCVFNCVCRSU4Qkg1L0ppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5L2J1aWxkL3ZpdGUvcGx1Z2luL21vY2sudHNcIjsvKipcclxuICogTW9jayBwbHVnaW4gZm9yIGRldmVsb3BtZW50IGFuZCBwcm9kdWN0aW9uLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYW5uY3diL3ZpdGUtcGx1Z2luLW1vY2tcclxuICovXHJcbmltcG9ydCB7IHZpdGVNb2NrU2VydmUgfSBmcm9tICd2aXRlLXBsdWdpbi1tb2NrJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ01vY2tQbHVnaW4oaXNCdWlsZDogYm9vbGVhbiwgcHJvZE1vY2s6IGJvb2xlYW4pIHtcclxuICByZXR1cm4gdml0ZU1vY2tTZXJ2ZSh7XHJcbiAgICBpZ25vcmU6IC9eXFxfLyxcclxuICAgIG1vY2tQYXRoOiAnbW9jaycsXHJcbiAgICBsb2NhbEVuYWJsZWQ6ICFpc0J1aWxkLFxyXG4gICAgcHJvZEVuYWJsZWQ6IGlzQnVpbGQgJiYgcHJvZE1vY2ssXHJcbiAgICBpbmplY3RDb2RlOiBgXHJcbiAgICAgIGltcG9ydCB7IHNldHVwUHJvZE1vY2tTZXJ2ZXIgfSBmcm9tICcuLi9tb2NrL19jcmVhdGVQcm9kdWN0aW9uU2VydmVyJztcclxuXHJcbiAgICAgIHNldHVwUHJvZE1vY2tTZXJ2ZXIoKTtcclxuICAgICAgYCxcclxuICB9KVxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiVzpcXFxcVlNDb2RlV29ya3NwYWNlXFxcXFx1NjY2Rlx1NTc1RVx1Njc1MVx1NkM4OVx1NkQ3OFx1NUYwRlx1N0VBMlx1NTM3MFx1NjU3MFx1NUI1N1x1NzgxNFx1NUI2Nlx1Njg0OFx1NEY4Qkg1XFxcXEppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5XFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJXOlxcXFxWU0NvZGVXb3Jrc3BhY2VcXFxcXHU2NjZGXHU1NzVFXHU2NzUxXHU2Qzg5XHU2RDc4XHU1RjBGXHU3RUEyXHU1MzcwXHU2NTcwXHU1QjU3XHU3ODE0XHU1QjY2XHU2ODQ4XHU0RjhCSDVcXFxcSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHlcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcY29tcHJlc3MudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1c6L1ZTQ29kZVdvcmtzcGFjZS8lRTYlOTklQUYlRTUlOUQlOUUlRTYlOUQlOTElRTYlQjIlODklRTYlQjUlQjglRTUlQkMlOEYlRTclQkElQTIlRTUlOEQlQjAlRTYlOTUlQjAlRTUlQUQlOTclRTclQTAlOTQlRTUlQUQlQTYlRTYlQTElODglRTQlQkUlOEJINS9KaW5nd3UtdmlsbGFnZS1yZXNlYXJjaC1zdHVkeS9idWlsZC92aXRlL3BsdWdpbi9jb21wcmVzcy50c1wiOy8qKlxyXG4gKiBVc2VkIHRvIHBhY2thZ2UgYW5kIG91dHB1dCBnemlwLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IGluIFZpdGUsIHRoZSBzcGVjaWZpYyByZWFzb24gaXMgc3RpbGwgYmVpbmcgaW52ZXN0aWdhdGVkXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbm5jd2Ivdml0ZS1wbHVnaW4tY29tcHJlc3Npb25cclxuICovXHJcbmltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9uIH0gZnJvbSAndml0ZSdcclxuXHJcbmltcG9ydCBjb21wcmVzc1BsdWdpbiBmcm9tICd2aXRlLXBsdWdpbi1jb21wcmVzc2lvbidcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25maWdDb21wcmVzc1BsdWdpbihcclxuICBjb21wcmVzczogJ2d6aXAnIHwgJ2Jyb3RsaScgfCAnbm9uZScsXHJcbiAgZGVsZXRlT3JpZ2luRmlsZSA9IGZhbHNlLFxyXG4pOiBQbHVnaW5PcHRpb24gfCBQbHVnaW5PcHRpb25bXSB7XHJcbiAgY29uc3QgY29tcHJlc3NMaXN0ID0gY29tcHJlc3Muc3BsaXQoJywnKVxyXG5cclxuICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdXHJcblxyXG4gIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoJ2d6aXAnKSkge1xyXG4gICAgcGx1Z2lucy5wdXNoKFxyXG4gICAgICBjb21wcmVzc1BsdWdpbih7XHJcbiAgICAgICAgZXh0OiAnLmd6JyxcclxuICAgICAgICBkZWxldGVPcmlnaW5GaWxlLFxyXG4gICAgICB9KSxcclxuICAgIClcclxuICB9XHJcbiAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcygnYnJvdGxpJykpIHtcclxuICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgY29tcHJlc3NQbHVnaW4oe1xyXG4gICAgICAgIGV4dDogJy5icicsXHJcbiAgICAgICAgYWxnb3JpdGhtOiAnYnJvdGxpQ29tcHJlc3MnLFxyXG4gICAgICAgIGRlbGV0ZU9yaWdpbkZpbGUsXHJcbiAgICAgIH0pLFxyXG4gICAgKVxyXG4gIH1cclxuICByZXR1cm4gcGx1Z2luc1xyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiVzpcXFxcVlNDb2RlV29ya3NwYWNlXFxcXFx1NjY2Rlx1NTc1RVx1Njc1MVx1NkM4OVx1NkQ3OFx1NUYwRlx1N0VBMlx1NTM3MFx1NjU3MFx1NUI1N1x1NzgxNFx1NUI2Nlx1Njg0OFx1NEY4Qkg1XFxcXEppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5XFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJXOlxcXFxWU0NvZGVXb3Jrc3BhY2VcXFxcXHU2NjZGXHU1NzVFXHU2NzUxXHU2Qzg5XHU2RDc4XHU1RjBGXHU3RUEyXHU1MzcwXHU2NTcwXHU1QjU3XHU3ODE0XHU1QjY2XHU2ODQ4XHU0RjhCSDVcXFxcSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHlcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcdmlzdWFsaXplci50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVzovVlNDb2RlV29ya3NwYWNlLyVFNiU5OSVBRiVFNSU5RCU5RSVFNiU5RCU5MSVFNiVCMiU4OSVFNiVCNSVCOCVFNSVCQyU4RiVFNyVCQSVBMiVFNSU4RCVCMCVFNiU5NSVCMCVFNSVBRCU5NyVFNyVBMCU5NCVFNSVBRCVBNiVFNiVBMSU4OCVFNCVCRSU4Qkg1L0ppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5L2J1aWxkL3ZpdGUvcGx1Z2luL3Zpc3VhbGl6ZXIudHNcIjsvKipcclxuICogUGFja2FnZSBmaWxlIHZvbHVtZSBhbmFseXNpc1xyXG4gKi9cclxuaW1wb3J0IHZpc3VhbGl6ZXIgZnJvbSAncm9sbHVwLXBsdWdpbi12aXN1YWxpemVyJ1xyXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbiB9IGZyb20gJ3ZpdGUnXHJcbmltcG9ydCB7IGlzUmVwb3J0TW9kZSB9IGZyb20gJy4uLy4uL3V0aWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ1Zpc3VhbGl6ZXJDb25maWcoKSB7XHJcbiAgaWYgKGlzUmVwb3J0TW9kZSgpKSB7XHJcbiAgICByZXR1cm4gdmlzdWFsaXplcih7XHJcbiAgICAgIGZpbGVuYW1lOiAnLi9ub2RlX21vZHVsZXMvLmNhY2hlL3Zpc3VhbGl6ZXIvc3RhdHMuaHRtbCcsXHJcbiAgICAgIG9wZW46IHRydWUsXHJcbiAgICAgIGd6aXBTaXplOiB0cnVlLFxyXG4gICAgICBicm90bGlTaXplOiB0cnVlLFxyXG4gICAgfSkgYXMgUGx1Z2luT3B0aW9uXHJcbiAgfVxyXG4gIHJldHVybiBbXVxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiVzpcXFxcVlNDb2RlV29ya3NwYWNlXFxcXFx1NjY2Rlx1NTc1RVx1Njc1MVx1NkM4OVx1NkQ3OFx1NUYwRlx1N0VBMlx1NTM3MFx1NjU3MFx1NUI1N1x1NzgxNFx1NUI2Nlx1Njg0OFx1NEY4Qkg1XFxcXEppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5XFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJXOlxcXFxWU0NvZGVXb3Jrc3BhY2VcXFxcXHU2NjZGXHU1NzVFXHU2NzUxXHU2Qzg5XHU2RDc4XHU1RjBGXHU3RUEyXHU1MzcwXHU2NTcwXHU1QjU3XHU3ODE0XHU1QjY2XHU2ODQ4XHU0RjhCSDVcXFxcSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHlcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcc3ZnU3ByaXRlLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9XOi9WU0NvZGVXb3Jrc3BhY2UvJUU2JTk5JUFGJUU1JTlEJTlFJUU2JTlEJTkxJUU2JUIyJTg5JUU2JUI1JUI4JUU1JUJDJThGJUU3JUJBJUEyJUU1JThEJUIwJUU2JTk1JUIwJUU1JUFEJTk3JUU3JUEwJTk0JUU1JUFEJUE2JUU2JUExJTg4JUU0JUJFJThCSDUvSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHkvYnVpbGQvdml0ZS9wbHVnaW4vc3ZnU3ByaXRlLnRzXCI7LyoqXHJcbiAqICBWaXRlIFBsdWdpbiBmb3IgZmFzdCBjcmVhdGluZyBTVkcgc3ByaXRlcy5cclxuICogaHR0cHM6Ly9naXRodWIuY29tL2FubmN3Yi92aXRlLXBsdWdpbi1zdmctaWNvbnNcclxuICovXHJcblxyXG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnXHJcbmltcG9ydCB7IGNyZWF0ZVN2Z0ljb25zUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4tc3ZnLWljb25zJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ1N2Z0ljb25zUGx1Z2luKGlzQnVpbGQ6IGJvb2xlYW4pIHtcclxuICAvLyBcdTYzMDdcdTVCOUFcdTk3MDBcdTg5ODFcdTdGMTNcdTVCNThcdTc2ODRcdTU2RkVcdTY4MDdcdTY1ODdcdTRFRjZcdTU5MzlcclxuICBjb25zdCBzdmdJY29uc1BsdWdpbiA9IGNyZWF0ZVN2Z0ljb25zUGx1Z2luKHtcclxuICAgIGljb25EaXJzOiBbcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvYXNzZXRzL2ljb25zJyldLFxyXG4gICAgLy8gXHU2NjJGXHU1NDI2XHU1MzhCXHU3RjI5XHJcbiAgICBzdmdvT3B0aW9uczogaXNCdWlsZCxcclxuICAgIC8vIFx1NjMwN1x1NUI5QXN5bWJvbElkXHU2ODNDXHU1RjBGXHJcbiAgICBzeW1ib2xJZDogJ2ljb24tW2Rpcl0tW25hbWVdJyxcclxuICB9KVxyXG4gIHJldHVybiBzdmdJY29uc1BsdWdpblxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiVzpcXFxcVlNDb2RlV29ya3NwYWNlXFxcXFx1NjY2Rlx1NTc1RVx1Njc1MVx1NkM4OVx1NkQ3OFx1NUYwRlx1N0VBMlx1NTM3MFx1NjU3MFx1NUI1N1x1NzgxNFx1NUI2Nlx1Njg0OFx1NEY4Qkg1XFxcXEppbmd3dS12aWxsYWdlLXJlc2VhcmNoLXN0dWR5XFxcXGJ1aWxkXFxcXHZpdGVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIlc6XFxcXFZTQ29kZVdvcmtzcGFjZVxcXFxcdTY2NkZcdTU3NUVcdTY3NTFcdTZDODlcdTZENzhcdTVGMEZcdTdFQTJcdTUzNzBcdTY1NzBcdTVCNTdcdTc4MTRcdTVCNjZcdTY4NDhcdTRGOEJINVxcXFxKaW5nd3UtdmlsbGFnZS1yZXNlYXJjaC1zdHVkeVxcXFxidWlsZFxcXFx2aXRlXFxcXHByb3h5LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9XOi9WU0NvZGVXb3Jrc3BhY2UvJUU2JTk5JUFGJUU1JTlEJTlFJUU2JTlEJTkxJUU2JUIyJTg5JUU2JUI1JUI4JUU1JUJDJThGJUU3JUJBJUEyJUU1JThEJUIwJUU2JTk1JUIwJUU1JUFEJTk3JUU3JUEwJTk0JUU1JUFEJUE2JUU2JUExJTg4JUU0JUJFJThCSDUvSmluZ3d1LXZpbGxhZ2UtcmVzZWFyY2gtc3R1ZHkvYnVpbGQvdml0ZS9wcm94eS50c1wiOy8qKlxyXG4gKiBVc2VkIHRvIHBhcnNlIHRoZSAuZW52LmRldmVsb3BtZW50IHByb3h5IGNvbmZpZ3VyYXRpb25cclxuICovXHJcbmltcG9ydCB0eXBlIHsgUHJveHlPcHRpb25zIH0gZnJvbSAndml0ZSdcclxuXHJcbnR5cGUgUHJveHlJdGVtID0gW3N0cmluZywgc3RyaW5nXVxyXG5cclxudHlwZSBQcm94eUxpc3QgPSBQcm94eUl0ZW1bXVxyXG5cclxudHlwZSBQcm94eVRhcmdldExpc3QgPSBSZWNvcmQ8c3RyaW5nLCBQcm94eU9wdGlvbnMgJiB7IHJld3JpdGU6IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZyB9PlxyXG5cclxuY29uc3QgaHR0cHNSRSA9IC9eaHR0cHM6XFwvXFwvL1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHByb3h5XHJcbiAqIEBwYXJhbSBsaXN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJveHkobGlzdDogUHJveHlMaXN0ID0gW10pIHtcclxuICBjb25zdCByZXQ6IFByb3h5VGFyZ2V0TGlzdCA9IHt9XHJcbiAgZm9yIChjb25zdCBbcHJlZml4LCB0YXJnZXRdIG9mIGxpc3QpIHtcclxuICAgIGNvbnN0IGlzSHR0cHMgPSBodHRwc1JFLnRlc3QodGFyZ2V0KVxyXG5cclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9odHRwLXBhcnR5L25vZGUtaHR0cC1wcm94eSNvcHRpb25zXHJcbiAgICByZXRbcHJlZml4XSA9IHtcclxuICAgICAgdGFyZ2V0LFxyXG4gICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXHJcbiAgICAgIHdzOiB0cnVlLFxyXG4gICAgICByZXdyaXRlOiBwYXRoID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtwcmVmaXh9YCksICcnKSxcclxuICAgICAgLy8gaHR0cHMgaXMgcmVxdWlyZSBzZWN1cmU9ZmFsc2VcclxuICAgICAgLy8gXHU1OTgyXHU2NzlDXHU2MEE4c2VjdXJlPVwidHJ1ZVwiXHU1M0VBXHU1MTQxXHU4QkI4XHU2NzY1XHU4MUVBIEhUVFBTIFx1NzY4NFx1OEJGN1x1NkM0Mlx1RkYwQ1x1NTIxOXNlY3VyZT1cImZhbHNlXCJcdTYxMEZcdTU0NzNcdTc3NDBcdTUxNDFcdThCQjhcdTY3NjVcdTgxRUEgSFRUUCBcdTU0OEMgSFRUUFMgXHU3Njg0XHU4QkY3XHU2QzQyXHUzMDAyXHJcbiAgICAgIC4uLihpc0h0dHBzID8geyBzZWN1cmU6IGZhbHNlIH0gOiB7fSksXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmV0XHJcblxyXG4gIC8vIHJldFxyXG4gIC8vIHtcclxuICAvLyAgICcvdGVzdC9hcGknOiB7XHJcbiAgLy8gICAgIHRhcmdldDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzA4MC90ZXN0L2FwaScsXHJcbiAgLy8gICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAvLyAgICAgd3M6IHRydWUsXHJcbiAgLy8gICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cCgvXlxcL3Rlc3QvYXBpLyksICcnKSxcclxuICAvLyAgIH0sXHJcbiAgLy8gICAnL3VwbG9hZCc6IHtcclxuICAvLyAgICAgdGFyZ2V0OiAnaHR0cDovL2xvY2FsaG9zdDo4MDAxL3VwbG9hZCcsXHJcbiAgLy8gICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAvLyAgICAgd3M6IHRydWUsXHJcbiAgLy8gICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cCgvXlxcL3VwbG9hZC8pLCAnJyksXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBNmUsU0FBUyxlQUFlO0FBRXJnQixTQUFTLGVBQWU7QUFDeEIsU0FBUyxjQUFjOzs7QUNEdkIsT0FBTyxZQUFZO0FBYVosU0FBUyxlQUF3QjtBQUN0QyxTQUFPLFFBQVEsSUFBSSxXQUFXO0FBQ2hDO0FBSU8sU0FBUyxXQUFXLFNBQThCO0FBQ3ZELFFBQU0sTUFBVyxDQUFDO0FBRWxCLGFBQVcsV0FBVyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBRTFDLFFBQUksV0FBVyxRQUFRLE9BQU8sRUFBRSxRQUFRLFFBQVEsSUFBSTtBQUNwRCxlQUFXLGFBQWEsU0FBUyxPQUFPLGFBQWEsVUFBVSxRQUFRO0FBRXZFLFFBQUksWUFBWSxhQUFhO0FBQzNCLGlCQUFXLE9BQU8sUUFBUTtBQUFBLElBQzVCO0FBQ0EsUUFBSSxZQUFZLGNBQWM7QUFDNUIsVUFBSTtBQUNGLG1CQUFXLEtBQUssTUFBTSxRQUFRO0FBQUEsTUFDaEMsU0FDTyxPQUFPO0FBQUEsTUFBQztBQUFBLElBQ2pCO0FBQ0EsUUFBSSxPQUFPLElBQUk7QUFDZixZQUFRLElBQUksT0FBTyxJQUFJO0FBQUEsRUFDekI7QUFDQSxTQUFPO0FBQ1Q7OztBQ3pDQSxPQUFPLGdCQUFnQjtBQUN2QixTQUFTLG9CQUFvQjtBQUM3QixPQUFPLFNBQVM7QUFDaEIsT0FBTyxZQUFZO0FBQ25CLE9BQU8sZ0JBQWdCOzs7QUNBdkIsU0FBUyx3QkFBd0I7OztBQ0xqQztBQUFBLEVBQ0UsTUFBUTtBQUFBLEVBQ1IsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLEVBQ1gsU0FBVztBQUFBLEVBQ1gsZ0JBQWtCO0FBQUEsRUFDbEIsUUFBVTtBQUFBLElBQ1IsTUFBUTtBQUFBLElBQ1IsT0FBUztBQUFBLElBQ1QsS0FBTztBQUFB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
